#ifndef PHYSICS_IBODY_H
#define PHYSICS_IBODY_H

#include "Common/Common.h"
#include "Physics/Shapes/IShape.h"
#include "Physics/Colliders/ICollider.h"

namespace physics {

	class IBody {
	public:

		enum Type {
			Static = 0,
			Dynamic = 1,
			Kinematic = 2
		};

		virtual ~IBody( ) {
		}

		virtual void SetVel( const Transform& vel ) = 0;
		virtual Transform GetVel( ) const = 0;

		virtual void SetPos( const Transform& pos ) = 0;
		virtual Transform GetPos( ) const = 0;

		virtual float GetMass( ) const = 0;
		virtual void SetMass( float mass ) = 0;

		virtual float GetInertia( ) const = 0;
		virtual void SetInertia( float inertia ) = 0;

		virtual Type GetType( ) const = 0;
		virtual void SetType( Type value ) = 0;

		virtual IIterable<const ICollider*>* GetColliders( ) const = 0;
		virtual ICollider* CreateCollider( float friction, float restitution, const IShape* shape ) = 0;
		virtual void DestroyCollider( ICollider* collider ) = 0;
	};
}
#endif
